"""
@author: wangzhongren
@file: 基础练习 1-6.py
@time: 2023/12/9 16:20
"""

# 1、python解释器有哪些，python是解释型语言还是编译型语言，python是动态类型语言还是静态类型语言
# CPython: 官方的python解释器，使用c语言实现，是使用最广泛的解释器
# Jython: 使用Java实现的python解释器，可以将python代码编译为Java字节码，并在Java虚拟机（JVM）上运行
# IronPython: 使用C#实现的Python解释器，可以在.NET框架上运行python代码
# PyPy: 用python编写的python解释器，它使用即时编译技术（JIT）来提高执行速度
# 是解释型语言
# 是动态类型语言


# 2、python中有哪些可变数据类型，哪些不可变数据类型数据。
# 可变数据类型有：列表（list）, 字典（dict）, 集合（set）
# 不可变数据类型有：数字（int、float、complex）, 字符串（str） , 元组（tuple）
# 可变指的是该数据类型的对象在内存中的值是可以修改的


# 3、python中工厂函数有哪些，举例说出6个
# int()：创建整数对象
x = int(5)
print(x)  # 输出：5

# float()：创建浮点数对象
y = float(3.14)
print(y)  # 输出：3.14

# str()：创建字符串对象
z = str("Hello")
print(z)  # 输出："Hello"

# list()：创建列表对象
lst = list([1, 2, 3])
print(lst)  # 输出：[1, 2, 3]

# dict()：创建字典对象
d = dict({"name": "Alice", "age": 25})
print(d)  # 输出：{"name": "Alice", "age": 25}

# set()：创建集合对象
s = set([1, 2, 3, 4])
print(s)  # 输出：{1, 2, 3, 4}


# 4、python中容器类型有哪些？list和set的区别是什么？
# 1. 列表（List）：用于存储一组有序的元素，可以通过索引访问和修改元素。
#
# 2. 元组（Tuple）：与列表类似，用于存储一组有序的元素，但是元组是不可变的，即不能修改元素。
#
# 3. 集合（Set）：用于存储一组无序的唯一元素，不允许有重复的元素。
#
# 4. 字典（Dictionary）：用于存储键值对（key-value）的映射关系，通过键来访问和修改对应的值。
#
# 5. 字符串（String）：用于存储一组有序的字符，字符串是不可变的，即不能修改字符。
#
# 6. 字节数组（Bytes）：用于存储二进制数据，字节数组是可变的，可以修改其中的元素。
#
# list和set的区别是什么？
# 1. 有序性：列表是有序的，元素的顺序与添加顺序一致，而集合是无序的，元素的顺序是不确定的。
#
# 2. 可变性：列表是可变的，可以通过索引对元素进行修改、添加或删除操作，而集合中元素的值是不可变的，可以添加或删除元素，但不能修改。
#
# 3. 唯一性：列表可以包含重复的元素，而集合中的元素是唯一的，不允许重复。
#
# 4. 存储方式：列表使用索引来访问元素，而集合使用哈希表来存储元素，所以集合的查询操作速度更快。
#
# 因此，如果需要保持元素的顺序，允许重复的元素，并且需要频繁对元素进行修改或访问，可以使用列表。
# 如果需要存储唯一的元素，并且对元素的添加和删除操作更频繁，可以使用集合。

# 5、python中字典的底层实现原理是什么？
# 字典的底层实现原理主要包括哈希表（Hash Table）和散列函数（Hash Function）。
#
# 哈希表是一种根据键的哈希值（Hash Value）来存储和查找数据的数据结构。它通过将键通过散列函数转换为哈希值，然后将该哈希值作为索引存储对应的值。
# 由于哈希值具有唯一性，因此可以通过哈希值快速找到对应的值。
# 在Python中，字典的键必须是可哈希的，即不可变的对象，例如整数、字符串、元组等。
# 可变的对象，如列表、字典等，不能作为键。
#
# 当我们向字典中添加键值对时，Python会根据键的哈希值计算出对应的存储位置，并将值存储在该位置上。
# 当需要查找某个键的值时，Python会再次计算键的哈希值，然后根据哈希值找到对应的存储位置，并返回对应的值。
#
# 需要注意的是，字典的存储顺序是不确定的，并且会根据字典的大小动态调整存储空间。
# 当字典的键值对数量增加时，Python会重新分配更大的存储空间，并将原有的键值对重新哈希到新的存储空间中。


# 6、python中异常捕获的作用是什么？
# a.防止程序因为出现异常而终止：如果代码可能会出现异常，并且未进行异常捕获处理，程序在遇到异常时会立即终止并抛出异常信息。
# 通过异常捕获，可以使程序在遇到异常时不会终止，而是继续执行其他代码，提高程序的健壮性。
# b.提供异常处理机制：当程序发生异常时，可以通过异常捕获来进行相应的处理。可以根据不同的异常类型，编写不同的异常处理代码，以满足特定的处理需求。
# 例如，可以记录日志、发送警报、回滚操作等。
# c.明确异常信息：异常捕获可以获取和处理异常的详细信息，如异常类型、异常消息等。这样可以更好地了解和排查程序出现异常的原因，并进行相应的修复。